package it.scambiocorse.areaprivata.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import it.scambiocorse.dao.AreaService;
import it.scambiocorse.dao.ClienteService;
import it.scambiocorse.dao.CodaService;
import it.scambiocorse.dao.ServizioService;
import it.scambiocorse.dao.UtenteDao;
import it.scambiocorse.dao.UtenteService;
import it.scambiocorse.model.AreaType;
import it.scambiocorse.model.AutistaType;
import it.scambiocorse.model.ClienteType;
import it.scambiocorse.model.CodaType;
import it.scambiocorse.model.JTableType;
import it.scambiocorse.model.ServizioType;
import it.scambiocorse.model.SorgenteType;
import it.scambiocorse.model.UtenteType;
import it.scambiocorse.utils.Costanti;
import it.scambiocorse.utils.InviaEmail;
import it.scambiocorse.utils.LabelValueBean;
import it.scambiocorse.utils.ResourceManager;
import it.scambiocorse.utils.Utils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.BeanWrapperImpl;
import org.springframework.web.servlet.mvc.multiaction.*;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.view.RedirectView;
import org.springframework.web.util.JavaScriptUtils;

import sun.rmi.runtime.NewThreadAction;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;

public class AreaPrivataMultiController extends  MultiActionController {
	private ServizioService servizioDao = null;
	private AreaService areaDao = null;
	private UtenteService utenteDao = null;
	private ClienteService clienteDao = null;

	

	public AreaService getAreaDao() {
		return areaDao;
	}
	public void setAreaDao(AreaService areaDao) {
		this.areaDao = areaDao;
	}
	public ServizioService getServizioDao() {
		return servizioDao;
	}
	public void setServizioDao(ServizioService servizioDao) {
		this.servizioDao = servizioDao;
	}
	public UtenteService getUtenteDao() {
		return utenteDao;
	}
	public void setUtenteDao(UtenteService utenteDao) {
		this.utenteDao = utenteDao;
	}
	public ClienteService getClienteDao() {
		return clienteDao;
	}
	public void setClienteDao(ClienteService clienteDao) {
		this.clienteDao = clienteDao;
	}	



	final Logger logger = Logger.getLogger(getClass());


	
	@Override 
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
			return super.handleRequest(request, response);
	}
	
	

	
	
	public ModelAndView riepilogo(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
		
		try {
			
			
			HttpSession session = request.getSession(false);
			if (Utils.isNull(session) || session.getAttribute("dettaglio") == null) {
				session = request.getSession(true);
				logger.warn("Sessione Scaduta");
				return new ModelAndView("expired");
			} else {
				dettaglio = (UtenteType)session.getAttribute("dettaglio");
			}

			url = "riepilogo";
				ModelAndView mav = new ModelAndView(url);
				String dataIniz = Costanti.DATA_INIZ;
				long x =(Utils.dataStringTimestamp(Utils.getSysDateStr(), Costanti.DATA_PATTERN).getTime())+Costanti.TRE_GG_MS;
				String dataFine = Utils.dataTimestampString(new Timestamp(x));
				
				ArrayList<ServizioType> listaServizi =  servizioDao.listaServiziIdUser(dettaglio.getIdUser(), dataIniz, dataFine);
				Gson gson = new Gson();
				
				ArrayList<AutistaType> listaAutisti = areaDao.listaAutistiIdUser(dettaglio.getIdUser());
				dettaglio.setListaAutisti(listaAutisti);
				ArrayList<SorgenteType> listaSorgenti = areaDao.listaSorgentiIdUser(dettaglio.getIdUser());
				dettaglio.setListaSorgenti(listaSorgenti);
				ArrayList<ClienteType> clientiList = clienteDao.listaClienti(dettaglio.getIdUser());
				dettaglio.setClientiList(clientiList);
				

				
				logger.warn("Procedo al redirect "+url);
				
				mav.addObject("dataIniz", dataIniz);
				mav.addObject("dataFine", dataFine);
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "listaServizi.html");
				mav.addObject("listaServizi", listaServizi);
				mav.addObject("listaJson", gson.toJson(listaServizi));

				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+((dettaglio != null) ? ""+dettaglio.getIdUser(): "N/A" ));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
	
	
	
	public ModelAndView inviaServizio(HttpServletRequest request, HttpServletResponse response, ServizioType s) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "inviaServizio";
				ModelAndView mav = new ModelAndView(url);

				
				
				String caller =  request.getParameter("caller");
				String tipoOpe = request.getParameter("form"); 
				if (!Utils.isValid(tipoOpe)) {  //FORMBACKINGOBJECT
					s = servizioDao.dettaglioServizioIdServUser(s.getIdServUser(), dettaglio.getIdUser());
					logger.debug("Preparazione all'invio del servizio");

				}
				if ("1".equals(tipoOpe)) {			   //SUBMIT
					logger.debug("Premuto SUBMIT, procedo ai controlli per l'invio dell'email");

					if (!Utils.isValid(s.getAutista().getEmail())) {
						errori.add(new LabelValueBean("Inserisci l'email a cui vuoi inviare il servizio, ", ""));
					} else {
						InviaEmail im = (InviaEmail)ResourceManager.getBean("inviaEmail");
						s.setUserNameInse(dettaglio.getNome()+" "+dettaglio.getCognome());
						logger.debug("Controllo che sia un utente registrato");
						boolean isRegistered = false;
						if (utenteDao.getIdUserDaEmail(s.getAutista().getEmail()) > 0){
							isRegistered = true;
						}
						if (im.inviaServizio(s,isRegistered)) {
							ok.add(new LabelValueBean("Servizio inviato correttamente all'indirizzo "+s.getAutista().getEmail(), ""));
						} else {
							errori.add(new LabelValueBean("Si sono verificati degli errori durante l'invio del servizio, per favore contattare l'assistenza, ", ""));
						}
					}
						
				}	
				logger.warn("Procedo al redirect "+url);
				
				
		    	if (errori.size() > 0) {
		    		request.setAttribute("listaErrori", errori);
		    	}
		    	
		    	if (ok.size() > 0) {
		    		request.setAttribute("listaOk", ok);
		    	}
				
				
				
				mav.addObject("command", s );
				mav.addObject("back", caller );
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject("e", e);
		}
	}	

	
	
	
	
	public ModelAndView inserisciAreaPrivata(HttpServletRequest request, HttpServletResponse response,AreaType area ) throws Exception {
	logger.debug("Ento in inserisciAreaPrivata(...)");
	
	UtenteType dettaglio =  null;
    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();

    
	String url = null;
	try {
			HttpSession session = request.getSession(false);
			if (session == null) {
				logger.warn("Sessione Scaduta");
				sessioneScaduta(request, response);
			} else {
				dettaglio = (UtenteType)session.getAttribute("dettaglio");
				if (dettaglio == null)
					sessioneScaduta(request, response);
			}
			
			ModelAndView mav = null;
	    	url = "inserisciArea";
			if ("Indietro".equals(request.getParameter("Indietro")) ) {
				mav = new ModelAndView(new RedirectView("listaAreePrivate.html"));
				mav.addObject(dettaglio);
				return mav;
			}
			
			String tipoOpe = request.getParameter("form");
			mav = new ModelAndView(url);

				if ("1".equals(tipoOpe)) { // DOPO IL SUBMIT 
					area.setIdOwner(dettaglio.getIdUser());
					int idArea = 0;
				if (!Utils.isValid(area.getNomeArea())) {
					errori.add(new LabelValueBean("Inserire il nome col quale vuoi identificare la nuova area", ""));
				} else {
						logger.debug("Procedo all'inserimento dell'Area");
						idArea = areaDao.inserisciArea(area);
						
						if (idArea < 0) {
							errori.add(new LabelValueBean("Si sono verificati degli errori durante l'inserimento, perfavore contattare l'assistenza", ""));
						} else {
							ok.add(new LabelValueBean("L'area \""+area.getNomeArea()+"\" e' stata inserita correttamente", ""));
							dettaglio.setAreeList(areaDao.listaAreePrivate(dettaglio.getIdUser()));
							mav = new ModelAndView(new RedirectView("listaAreePrivate.html"));
						}
				}
			}
			
	    	if (errori.size() > 0) {
	    		request.setAttribute("listaErrori", errori);
	    	}
	    	
	    	if (ok.size() > 0) {
	    		request.setAttribute("listaOk", ok);
	    	}
			
			logger.warn("Procedo al redirect "+url);
			
			
			mav.addObject("command", area);
			return mav.addObject("dettaglio", dettaglio);
			
	}catch (Exception e) {
		logger.error("SI E' VERIFICATO UN ERRORE");
		logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
		logger.error(e);
		return new ModelAndView("gestioneErrore").addObject(e);
	}
}	
	
	
	public ModelAndView listaServizi(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;

		try {
			
			
			HttpSession session = request.getSession(false);
			if (Utils.isNull(session) || session.getAttribute("dettaglio") == null) {
				session = request.getSession(true);
				logger.warn("Sessione Scaduta");
				return new ModelAndView("expired");
			} else {
				dettaglio = (UtenteType)session.getAttribute("dettaglio");
			}

				url = "listaServiziPerArea";
				ModelAndView mav = new ModelAndView(url);
				Gson g = new GsonBuilder().setDateFormat("yyyy-MM-dd k:mm:ss").create();

				
				ArrayList<SorgenteType> listaSorgenti = areaDao.listaSorgentiIdUser(dettaglio.getIdUser());
				ArrayList<AutistaType> listaAutisti = areaDao.listaAutistiIdUser(dettaglio.getIdUser());
				ArrayList<ClienteType> listaCLienti = clienteDao.listaClienti(dettaglio.getIdUser());
				
				HashMap selectLabel = new HashMap<String, Object>();
				selectLabel.put("DisplayText", "Selezionare");
				selectLabel.put("Value", "0");				
				
//				ArrayList listaSorgentiJson = new ArrayList();
//				for (SorgenteType s : listaSorgenti) {
//					HashMap jj = new HashMap<String, Object>();
//					jj.put("DisplayText", s.getNome());
//					jj.put("Value", s.getIdSorgente());
//					listaSorgentiJson.add(jj);
//				}
//				listaSorgentiJson.add(0, selectLabel);

				ArrayList listaAutistiJson = new ArrayList();
				for (AutistaType a : listaAutisti) {
					HashMap jj = new HashMap<String, Object>();
					jj.put("DisplayText", a.getNome());
					jj.put("Value", a.getIdAutista());
					listaAutistiJson.add(jj);
				}
				listaAutistiJson.add(0, selectLabel);
				
//				ArrayList listaCLientiJson = new ArrayList();
//				for (ClienteType c : listaCLienti) {
//					HashMap jj = new HashMap<String, Object>();
//					jj.put("DisplayText", c.getDescNome());
//					jj.put("Value", c.getIdCliente());
//					listaAutistiJson.add(jj);
//				}
//				listaCLientiJson.add(0, selectLabel);
				String dataIniz = request.getParameter("dataIniz");
				String dataFine = request.getParameter("dataFine");
				
				logger.warn("Procedo al redirect "+url);
				mav.addObject("dataIniz", dataIniz);
				mav.addObject("dataFine", dataFine);
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "listaServizi.html");
				session.setAttribute("pub", 0); // serve per cambiare il colore di jtable
				mav.addObject("listaAutisti", g.toJson(listaAutistiJson));
//				mav.addObject("listaClienti", g.toJson(listaCLientiJson));

				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+((dettaglio != null) ? ""+dettaglio.getIdUser(): "N/A" ));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
		
	
	public ModelAndView dettaglioCollaboratore(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;

		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					session = request.getSession(true);
					logger.warn("Sessione Scaduta");
					return new ModelAndView("expired");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "dettaglioCollaboratore";
				ModelAndView mav = new ModelAndView(url);
				
				int idAutista = 0;
				if (Utils.isValid(request.getParameter("id"))) {
					idAutista = Integer.parseInt(request.getParameter("id"));
				}
				ArrayList<AutistaType> listaAutisti = areaDao.listaAutistiIdUser(dettaglio.getIdUser());
				
				HashMap selectLabel = new HashMap<String, Object>();
				selectLabel.put("DisplayText", "Selezionare");
				selectLabel.put("Value", "0");	
				ArrayList listaAutistiJson = new ArrayList();
				for (AutistaType a : listaAutisti) {
					HashMap jj = new HashMap<String, Object>();
					jj.put("DisplayText", a.getNome());
					jj.put("Value", a.getIdAutista());
					listaAutistiJson.add(jj);
				}
				listaAutistiJson.add(0, selectLabel);
				AutistaType a = areaDao.dettaglioCollaboratore(idAutista, dettaglio.getIdUser());
				Gson g = new Gson();
				
				logger.warn("Procedo al redirect "+url);
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "dettaglioCollaboratore.html");
//				mav.addObject("dataIniz", dataIniz);
//				mav.addObject("dataFine", dataFine);
				mav.addObject("coll", a);
				mav.addObject("listaAutisti", g.toJson(listaAutistiJson));

				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
	public ModelAndView listaServiziCliente(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "listaServiziCliente";
				ModelAndView mav = new ModelAndView(url);
				
				int idCliente = 0;
				if (Utils.isValid(request.getParameter("id"))) {
					idCliente = Integer.parseInt(request.getParameter("id"));
				} 
				
				ClienteType cliente = clienteDao.getCliente(idCliente);
				
				ArrayList<AutistaType> listaAutisti = areaDao.listaAutistiIdUser(dettaglio.getIdUser());
				ArrayList listaAutistiJson = new ArrayList();
				for (AutistaType a : listaAutisti) {
					HashMap jj = new HashMap<String, Object>();
					jj.put("DisplayText", a.getNome());
					jj.put("Value", a.getIdAutista());
					listaAutistiJson.add(jj);
				}
				
				Gson g = new Gson();
				
//				ArrayList<ServizioType> listaServizi =  servizioDao.listaServiziCliente(dettaglio.getAppoIdCliente(), null, null);
				
				logger.warn("Procedo al redirect "+url);
				
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "listaServiziCliente.html");
				mav.addObject("cliente",cliente);
				mav.addObject("listaAutisti", g.toJson(listaAutistiJson));
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}

	public ModelAndView listaClienti(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "listaClienti";
				ModelAndView mav = new ModelAndView(url);
				
//				if (Utils.isValid(request.getParameter("idCliente"))) {
//					dettaglio.setAppoIdCliente(Integer.parseInt(request.getParameter("idCliente")));
//				} 
//				
//				ClienteType cliente = clienteDao.getCliente(dettaglio.getAppoIdCliente());
//				
				logger.warn("Procedo al redirect "+url);
				
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "listaServiziCliente.html");
//				mav.addObject("cliente",cliente);
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
	
		
	
	public ModelAndView listaServiziPartecipante(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "listaServiziPartecipante";
				ModelAndView mav = new ModelAndView(url);
				if (Utils.isValid(request.getParameter("idUser"))) { //Proviene da fuori
					dettaglio.setAppoIdPartecipante(Integer.parseInt(request.getParameter("idUser")));
				}
				
				UtenteType partecipante = utenteDao.getUser(dettaglio.getAppoIdPartecipante());
				String dataIniz = request.getParameter("dataIniz2");
				String dataFine = request.getParameter("dataFine2");

				ArrayList<ServizioType> listaServizi =  servizioDao.listaServiziPartecipante(dettaglio.getAppoIdPartecipante(), dataIniz, dataFine);
				
				logger.warn("Procedo al redirect "+url);
				
				mav.addObject("dataIniz", dataIniz);
				mav.addObject("dataFine", dataFine);
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "listaServiziAutista.html");
				mav.addObject("command", partecipante);
				mav.addObject("listaServizi", listaServizi);
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
	public ModelAndView listaAreePrivate(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
		try {
			
				
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				url = "listaAreePrivate";
				ModelAndView mav = new ModelAndView(url);
				String utente = request.getParameter("utente");
				
				
				if (!Utils.isNull(session.getAttribute("areaInserita"))) {
					request.setAttribute("areaInserita", session.getAttribute("areaInserita"));
					session.removeAttribute("areaInserita");
				}
				
				//resetto gli appo se proviene
				dettaglio.setAppoIdArea(0);
				dettaglio.setAppoNomeArea(null);
				

				
				ArrayList<AreaType> areeList = areaDao.listaAreePrivate(dettaglio.getIdUser());
				ArrayList<AutistaType> listaAutisti = areaDao.listaAutistiIdUser(dettaglio.getIdUser());
				ArrayList<SorgenteType> listaSorgenti = areaDao.listaSorgentiIdUser(dettaglio.getIdUser());
				
				ArrayList<ClienteType> clientiList = clienteDao.listaClienti(dettaglio.getIdUser());
				dettaglio.setClientiList(clientiList);
				
				logger.warn("Procedo al redirect "+url);
				dettaglio.setAreeList(areeList);
				dettaglio.setListaAutisti(listaAutisti);
				dettaglio.setListaSorgenti(listaSorgenti);
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "listaAreePrivate.html");
				return mav.addObject("dettaglio", dettaglio);
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}	

	
	public ModelAndView listaServiziSorgente(HttpServletRequest request, HttpServletResponse response, SorgenteType s) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;

		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "listaServiziSorgente";
				ModelAndView mav = new ModelAndView(url);
//				UtenteType autista = utenteDao.getUser(idAutista);
				
				if (Utils.isValid(request.getParameter("idSorgente"))) {
					dettaglio.setAppoNomeSorgente(request.getParameter("nome"));
				}
				
				
				String dataIniz = request.getParameter("dataIniz");
				String dataFine = request.getParameter("dataFine");

				ArrayList<ServizioType> listaServizi =  servizioDao.listaServiziSorgente(s.getIdSorgente(), dataIniz, dataFine);
				
				logger.warn("Procedo al redirect "+url);
				
				mav.addObject("dataIniz", dataIniz);
				mav.addObject("dataFine", dataFine);
				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "listaServiziAutista.html");
				mav.addObject("listaServizi", listaServizi);
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
	
	
	public ModelAndView listaAutisti(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "listaAutisti";
				ModelAndView mav = new ModelAndView(url);
				
				if (dettaglio.getListaAutisti() == null) {
					ArrayList<AutistaType> listaAutisti = areaDao.listaAutistiIdUser(dettaglio.getIdUser());
					dettaglio.setListaAutisti(listaAutisti);
				}
				
				String tipoOpe = request.getParameter("oper");
				if (Utils.isValid(tipoOpe) && tipoOpe.equals("elimina")) {
					int idAutista = Integer.parseInt(request.getParameter("id_autista"));
					logger.debug("Controllo che l'autista sia effettivamente di sua competenza");
					boolean isCompetente = false;
					for (AutistaType a : dettaglio.getListaAutisti()) {
						if (a.getIdAutista() == idAutista) {
							isCompetente = true;
							logger.debug("Puo' eliminare l'autista");
							break;
						}
					}
					if (isCompetente) {
						boolean isDeleted = areaDao.eliminaAutista(idAutista);
						if (isDeleted) {
							ok.add(new LabelValueBean("Autista eliminato correttamente, tutti i servizi prima assegnati a lui sono adesso senza autista ", ""));
							dettaglio.setListaAutisti(areaDao.listaAutistiIdUser(dettaglio.getIdUser()));
						}
					} else {
						errori.add(new LabelValueBean("Mi spieghi cosa stai cercando di fare? ", ""));
					}
					
					
				}
				
				
		    	if (errori.size() > 0) {
		    		request.setAttribute("listaErrori", errori);
		    	}
		    	
		    	if (ok.size() > 0) {
		    		request.setAttribute("listaOk", ok);
		    	}

				
				logger.warn("Procedo al redirect "+url);
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}	
	
	public ModelAndView listaCollaboratori(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
		try {
				HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessione Scaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				url = "listaCollaboratori";
				ModelAndView mav = new ModelAndView(url);
				
				
				logger.warn("Procedo al redirect "+url);
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}		
	
	
	public ModelAndView listaSorgenti(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
		try {
					HttpSession session = request.getSession(false);
					if (Utils.isNull(session) || session.getAttribute("dettaglio") == null) {
						session = request.getSession(true);
						logger.warn("Sessione Scaduta");
						sessioneScaduta(request, response);
					} else {
						dettaglio = (UtenteType)session.getAttribute("dettaglio");
					}
				
				url = "listaSorgenti";
				ModelAndView mav = new ModelAndView(url);
				
				logger.warn("Procedo al redirect "+url);
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}	
	
	
	
	
	
	
	
	public ModelAndView dettaglioServizio(HttpServletRequest request, HttpServletResponse response, ServizioType s) throws Exception {

		final Logger logger = Logger.getLogger(getClass());
		UtenteType dettaglio =  null;
		String url = "dettaglioServizio";
		try {
			
				HttpSession session = request.getSession(false);
				if (Utils.isNull(session) || session.getAttribute("dettaglio") == null) {
					session = request.getSession(true);
					logger.warn("Sessione Scaduta");
					sessioneScaduta(request, response);
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
				}
				
				ModelAndView mav = new ModelAndView(url);
				
				s =  servizioDao.dettaglioServizioIdServUser(s.getIdServUser(), dettaglio.getIdUser());
				mav.addObject("servizio", s);
				mav.addObject("back", request.getParameter("caller"));

				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
	
	

	public ModelAndView profiloUtente(HttpServletRequest request, HttpServletResponse response) throws Exception {
		UtenteType dettaglio =  null;
		String url = null;
		try {
			
			
			HttpSession session = request.getSession(false);
			if (Utils.isNull(session) || session.getAttribute("dettaglio") == null) {
				session = request.getSession(true);
				logger.warn("Sessione Scaduta");
				sessioneScaduta(request, response);
			} else {
				dettaglio = (UtenteType)session.getAttribute("dettaglio");
			}

				ModelAndView mav = null;
				if (dettaglio.isAccessoPubblico()) {
					url = request.getContextPath()+"/areaPubblica/profiloUtente.html";
					mav = new ModelAndView(new RedirectView(url));
					
				} else {
					url = "profiloUtentePrivato";
					mav = new ModelAndView(url);
				}
				
				
				logger.warn("Procedo al redirect "+url);

				mav.addObject("back", request.getParameter("caller"));
				mav.addObject("caller", "profiloUtente.html");
				mav.addObject("dettaglio", dettaglio);
				
				return mav;
				
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+((dettaglio != null) ? ""+dettaglio.getIdUser(): "N/A" ));
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
	}
	
	
	
	
	private ModelAndView sessioneScaduta(HttpServletRequest request, HttpServletResponse response) throws Exception  {
		logger.debug("Sessione scaduta, procedo al redirect");
		return new ModelAndView("expired");
		
	}	
	

	private void sendJson(HttpServletResponse response, HashMap j) throws IOException {
		Gson g = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
		response.setContentType("application/json");
		PrintWriter out = response.getWriter();
		out.print(g.toJson(j));
		out.flush();
		out.close();
		logger.warn("Procedo al invio di servizi JSON ");
	}
	
		
	
	

//	public ModelAndView inserisciAutista(HttpServletRequest request, HttpServletResponse response, AutistaType a) throws Exception {
//	UtenteType dettaglio =  null;
//    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//
//
//	String url = null;
//	try {
//		
//			 
//			HttpSession session = request.getSession(false);
//			if (session == null) {
//				logger.warn("Sessione Scaduta");
//			} else {
//				dettaglio = (UtenteType)session.getAttribute("dettaglio");
//			}
//			
//			url = "inserisciAutista";
//			ModelAndView mav = new ModelAndView(url);
//			 if (Utils.isValid(request.getParameter("form"))) { // DOPO IL SUBMIT 
//				
//				int idAut = 0;
//				if (!Utils.isValid(a.getNome())) {
//					errori.add(new LabelValueBean("Inserire il nome col quale vuoi identificare l'autista", ""));
//				} else {
//						logger.debug("Procedo all'inserimento dell'autista");
//						a.setIdUserInse(dettaglio.getIdUser());
//						idAut = areaDao.inserisciAutista(a);
//						
//						if (idAut < 0) {
//							errori.add(new LabelValueBean("Si sono verificati degli errori durante l'inserimento, perfavore contattare l'assistenza", ""));
//						} else {
//							ok.add(new LabelValueBean("L'autista \""+a.getNome()+"\" e' stato inserito correttamente", ""));
//							dettaglio.setListaAutisti(areaDao.listaAutistiIdUser(dettaglio.getIdUser()));
//						}
//				}
//			}
//			
//	    	if (errori.size() > 0) {
//	    		request.setAttribute("listaErrori", errori);
//
//	    	}
//	    	
//	    	if (ok.size() > 0) {
//	    		request.setAttribute("listaOk", ok);
//	    	}
//			
//			logger.warn("Procedo al redirect "+url);
//	    	mav.addObject("back", request.getParameter("caller"));
//			mav.addObject("utenteRegistrato", new UtenteType());
//			mav.addObject("command", a);
//			return mav.addObject("dettaglio", dettaglio);
//			
//	}catch (Exception e) {
//		logger.error("SI E' VERIFICATO UN ERRORE");
//		logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//		logger.error(e);
//		return new ModelAndView("gestioneErrore").addObject(e);
//	}
//}	
	

//	public ModelAndView inserisciSorgente(HttpServletRequest request, HttpServletResponse response) throws Exception {
//	logger.debug("Ento in inserisciSorgente(...)");
//	UtenteType dettaglio =  null;
//	SorgenteType src =  new SorgenteType();
//    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//
//    
//	String url = null;
//	try {
//			HttpSession session = request.getSession(false);
//			if (session == null) {
//				logger.warn("Sessione Scaduta");
//			} else {
//				dettaglio = (UtenteType)session.getAttribute("dettaglio");
//			}
//			
//			url = "inserisciSorgente";
//			ModelAndView mav = new ModelAndView(url);
//			String tipoOpe = request.getParameter("form");
//			
//			if (!Utils.isValid(tipoOpe)) { //PRIMA VOLTA 
//				mav.addObject("command", src);
//				
//			} else if ("1".equals(tipoOpe)) { // DOPO IL SUBMIT 
//				
//				String nome = request.getParameter("nome");
//				src.setIdUserInse(dettaglio.getIdUser());
//				src.setNome(nome);
//				int idSrc = 0;
//				if (!Utils.isValid(nome)) {
//					errori.add(new LabelValueBean("Inserire il nome col quale vuoi identificare la sorgente", ""));
//				} else {
//						logger.debug("Procedo all'inserimento della sorgente");
//						idSrc = areaDao.inserisciSorgente(src);
//						
//						if (idSrc < 0) {
//							errori.add(new LabelValueBean("Si sono verificati degli errori durante l'inserimento, perfavore contattare l'assistenza", ""));
//						} else {
//							ok.add(new LabelValueBean("La sorgente \""+src.getNome()+"\" e' stata inserita correttamente", ""));
//							dettaglio.setListaSorgenti(areaDao.listaSorgentiIdUser(dettaglio.getIdUser()));
//						}
//				}
//			}
//			
//	    	if (errori.size() > 0) {
//	    		request.setAttribute("listaErrori", errori);
//
//	    	}
//	    	
//	    	if (ok.size() > 0) {
//	    		request.setAttribute("listaOk", ok);
//	    	}
//			
//			logger.warn("Procedo al redirect "+url);
//			mav.addObject("utenteRegistrato", new UtenteType());
//			mav.addObject("command", src);
//	    	mav.addObject("back", request.getParameter("caller"));
//			return mav.addObject("dettaglio", dettaglio);
//			
//	}catch (Exception e) {
//		logger.error("SI E' VERIFICATO UN ERRORE");
//		logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//		logger.error(e);
//		return new ModelAndView("gestioneErrore").addObject(e);
//	}
//}	
//	
	
	

	
	
//	
//	public ModelAndView associaUtente(HttpServletRequest request, HttpServletResponse response, UtenteType u) throws Exception {
//		UtenteType dettaglio =  null;
//		String url = null;
//	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//		try {
//			
//				 
//				HttpSession session = request.getSession(false);
//				if (session == null) {
//					logger.warn("Sessione Scaduta");
//				} else {
//					dettaglio = (UtenteType)session.getAttribute("dettaglio");
//				}
//				
//				url = "associaUtenteArea";
//				ModelAndView mav = new ModelAndView(url);
//				dettaglio.setListaPartecipanti(areaDao.listaPartecipanti(dettaglio.getAppoIdArea()));
//				String tipoOpe = request.getParameter("form");
////				
//					if ("1".equals(tipoOpe)) { // DOPO IL SUBMIT 
//					if (!Utils.isValid(u.getEmail())) {
//						errori.add(new LabelValueBean("Inserire l'email dell'utente", ""));
//					} else {
//							
//							int idDaAssociare = utenteDao.getIdUserDaEmail(u.getEmail());
//							//Controllo che non sia se stesso
//							if (dettaglio.getIdUser() == idDaAssociare) {
//								errori.add(new LabelValueBean("Non puoi associare te stesso!", ""));
//							} else
//							//Controllo che esista 1
//								
//							if (idDaAssociare < 1) {
//								errori.add(new LabelValueBean("Non esiste nessun utente associato a questo indirizzo email, invitalo a registrarsi su scambio corse!", ""));
//							}  else {
//								//Controllo che non sia gia' associato 2
//								ArrayList<UtenteType>  listaPart = areaDao.listaPartecipanti(dettaglio.getAppoIdArea());
//								boolean check = false;
//								for (UtenteType uu : listaPart) {
//									if (idDaAssociare == uu.getIdUser()) {
//										check = true;
//										break;
//									}
//								}
//								
//								if (check) {
//									errori.add(new LabelValueBean("L'utente risulta gia' associato", ""));
//								} else {
//									
//									// Controllo che abbia inserito il tipo accesso 
//									if (u.getTipoAccesso() != 0) {
//										logger.debug("Procedo all'associazione dell'utente con l'area "+dettaglio.getAppoNomeArea());
//										areaDao.associaUtente(dettaglio.getAppoIdArea(), idDaAssociare, u.getTipoAccesso());
//										ok.add(new LabelValueBean("Utente "+u.getLogin()+" associato all'area "+dettaglio.getAppoNomeArea(), ""));
//									} else {
//										errori.add(new LabelValueBean("Specificare il tipo di accesso", ""));
//									}
//								}
//								// fine 2
//							}
//					}
//				}
//					
//					
//		    	if (errori.size() > 0) {
//		    		request.setAttribute("listaErrori", errori);
//		    	}
//		    	
//		    	if (ok.size() > 0) {
//		    		request.setAttribute("listaOk", ok);
//		    	}
//				
//				logger.warn("Procedo al redirect "+url);
//				mav.addObject("command", u);
//				mav.addObject("caller", "listaServizi.html");
//				
//				return mav.addObject("dettaglio", dettaglio);
//				
//		}catch (Exception e) {
//			logger.error("SI E' VERIFICATO UN ERRORE");
//			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//			logger.error(e);
//			return new ModelAndView("gestioneErrore").addObject(e);
//		}
//	}
	
//	
//	public ModelAndView inserimentoServizio(HttpServletRequest request, HttpServletResponse response, ServizioType s) throws Exception {
//		UtenteType dettaglio =  null;
//		String url = null;
//	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//		try {
//				HttpSession session = request.getSession(false);
//				if (session == null) {
//					logger.warn("Sessione Scaduta");
//				} else {
//					dettaglio = (UtenteType)session.getAttribute("dettaglio");
//				}
//				
//				if (Utils.isNull(session) || session.getAttribute("dettaglio") == null) {
//				 throw new Exception("SESSIONE SCADUTA!");
//				} else {
//					dettaglio = (UtenteType)session.getAttribute("dettaglio");
//				}
//				
//				
//				url = "inserisciServizioAreaPrivata";
//				ModelAndView mav = new ModelAndView(url);
//
//				String tipoOpe = request.getParameter("form"); //FORMBACKINGOBJECT
//				if (!Utils.isValid(tipoOpe)) {
//					s.getArea().setIdArea( dettaglio.getAppoIdArea());
//					errori.add(new LabelValueBean("Ricordati che quando inserisci un servizio nessun campo e' obbligatorio e che la lista EXCEL o PDF riportera' solo i dati inseriti", ""));
//
//				} else if ("1".equals(tipoOpe)) {			   //SUBMIT
//					logger.debug("Controllo il tipo Accesso dell'utente ");
//					
//						
//						s.getArea().setIdArea(dettaglio.getAppoIdArea());
//						s.setIdUserInse(dettaglio.getIdUser());
//						
//						String oraFine = null;
//						if (Utils.isValid(s.getOreFine()) && Utils.isValid(s.getMinutiFine())) {
//							oraFine = s.getOreFine()+":"+s.getMinutiFine();
//							if (Utils.Time24HoursValidator(oraFine)) {
//								oraFine = Utils.getSysDateStr()+" "+s.getOreFine()+":"+s.getMinutiFine();
//								s.setOraFine(Utils.dataStringTimestamp(oraFine, "dd/MM/yyyy hh:mm"));
//							}
//						}
//						
//						// CONTROLLO ORARIO SE HA INSERITO DATA DEVE INSERIRE L'ORA
//						if (Utils.isValid(s.getData()) && (Utils.isValid(s.getOre()) && Utils.isValid(s.getMinuti())) ) {
//							int idServ = servizioDao.inserisciServizio(s);
//							if (idServ > 0) {
//								ok.add(new LabelValueBean("Servizio inserito correttamente, ", ""));
//							} else {
//								errori.add(new LabelValueBean("Si sono verificati degli errori durante l'inserimento, per favore contattare l'assistenza, ", ""));
//							}
//						} else {
//							errori.add(new LabelValueBean("Specificare data e ora del servizio", ""));
//						}
//
////						}
//					
//					}
//				logger.warn("Procedo al redirect "+url);
//				
//				
//		    	if (errori.size() > 0) {
//		    		request.setAttribute("listaErrori", errori);
//		    	}
//		    	
//		    	if (ok.size() > 0) {
//		    		request.setAttribute("listaOk", ok);
//		    	}
//				
//				
//				
//				mav.addObject("command", s );
//				return mav;
//				
//		}catch (Exception e) {
//			logger.error("SI E' VERIFICATO UN ERRORE");
//			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//			logger.error(e);
//			return new ModelAndView("gestioneErrore").addObject(e);
//		}
//	}
	
	
//	
//	public ModelAndView modificaServizio(HttpServletRequest request, HttpServletResponse response, ServizioType s) throws Exception {
//		UtenteType dettaglio =  null;
//		String url = null;
//	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//		try {
//				HttpSession session = request.getSession(false);
//				if (session == null) {
//					logger.warn("Sessione Scaduta");
//				} else {
//					dettaglio = (UtenteType)session.getAttribute("dettaglio");
//				}
//				
//				url = "modificaServizioAreaPrivata";
//				ModelAndView mav = new ModelAndView(url);
//				
//				
//				
//				String caller =  request.getParameter("caller");
//				String tipoOpe = request.getParameter("form"); //FORMBACKINGOBJECT
//				if (!Utils.isValid(tipoOpe)) {
//					s = servizioDao.dettaglioServizioIdServUser(s.getIdServUser(), dettaglio.getIdUser());
////					dettaglio.setListaPartecipanti(areaDao.listaPartecipanti(s.getArea().getIdArea()));
//
//				} else
//					if ("1".equals(tipoOpe)) {			   //SUBMIT
//					logger.debug("Controllo il tipo Accesso dell'utente ");
//
//						logger.debug("L'utente e' abilitato, procedo alla modifica");
//						
//							try {
//								
//								String oraFine = null;
//								if (Utils.isValid(s.getOreFine()) && Utils.isValid(s.getMinutiFine()) ){
//									oraFine = Utils.getSysDateStr()+" "+s.getOreFine()+":"+s.getMinutiFine();
//									if (!Utils.Time24HoursValidator(oraFine)) {
//										s.setOraFine(Utils.dataStringTimestamp(oraFine, "dd/MM/yyyy hh:mm"));
//									}
//								}								
//								s.getArea().setIdArea(dettaglio.getAppoIdArea());
//								s.setIdUserInse(dettaglio.getIdUser());
//								servizioDao.modificaServizio(s);
//								s = servizioDao.dettaglioServizioIdServUser(s.getIdServUser(), dettaglio.getIdUser());
//								ok.add(new LabelValueBean("Servizio modificato correttamente, ", ""));
//								
//							} catch (Exception e) {
//								errori.add(new LabelValueBean("Si sono verificati degli errori durante l'inserimento, per favore contattare l'assistenza, ", ""));
//							}
//				}
//				logger.warn("Procedo al redirect "+url);
//				
//				
//		    	if (errori.size() > 0) {
//		    		request.setAttribute("listaErrori", errori);
//		    	}
//		    	
//		    	if (ok.size() > 0) {
//		    		request.setAttribute("listaOk", ok);
//		    	}
//				
//				
//				
//				mav.addObject("command", s );
//				mav.addObject("caller", caller );
//				
//				return mav;
//				
//		}catch (Exception e) {
//			logger.error("SI E' VERIFICATO UN ERRORE");
//			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//			logger.error(e);
//			return new ModelAndView("gestioneErrore").addObject(e);
//		}
//	}	
//	
	
//	
//	public ModelAndView modificaAutista(HttpServletRequest request, HttpServletResponse response, AutistaType a) throws Exception {
//	UtenteType dettaglio =  null;
//    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//
//
//	String url = null;
//	try {
//		
//			 
//			HttpSession session = request.getSession(false);
//			if (session == null) {
//				logger.warn("Sessione Scaduta");
//			} else {
//				dettaglio = (UtenteType)session.getAttribute("dettaglio");
//			}
//			
//			url = "modificaAutista";
//			ModelAndView mav = new ModelAndView(url);
//			String form = request.getParameter("form");
//			logger.debug("Prelevo l'autista dalla lista autisti");
//			 if (!Utils.isValid(form)) {
//					int idAutista = Integer.parseInt(request.getParameter("id_autista"));
//					for (AutistaType af : dettaglio.getListaAutisti()) {
//						if (af.getIdAutista() == idAutista) {
//							a = af;
//							break;
//						}
//					} 
//			 } else if("1".equals(form)) {	 // DOPO IL SUBMIT 
//				if (!Utils.isValid(a.getNome())) {
//					errori.add(new LabelValueBean("Inserire il nome col quale vuoi identificare l'autista", ""));
//				} else {
//						logger.debug("Procedo alla modifica dell'autista");
//						boolean check = areaDao.modificaAutista(a);
//						
//						if (!check) {
//							errori.add(new LabelValueBean("Si sono verificati degli errori durante la modifica, perfavore contattare l'assistenza", ""));
//						} else {
//							ok.add(new LabelValueBean("L'autista \""+a.getNome()+"\" e' stato modificato correttamente", ""));
//							dettaglio.setListaAutisti(areaDao.listaAutistiIdUser(dettaglio.getIdUser()));
//						}
//				}
//			}
//			
//	    	if (errori.size() > 0) {
//	    		request.setAttribute("listaErrori", errori);
//
//	    	}
//	    	
//	    	if (ok.size() > 0) {
//	    		request.setAttribute("listaOk", ok);
//	    	}
//			
//			logger.warn("Procedo al redirect "+url);
//			mav.addObject("command", a);
//			return mav.addObject("dettaglio", dettaglio);
//			
//	}catch (Exception e) {
//		logger.error("SI E' VERIFICATO UN ERRORE");
//		logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//		logger.error(e);
//		return new ModelAndView("gestioneErrore").addObject(e);
//	}
//}	
		
	
	
//	public ModelAndView modificaSorgente(HttpServletRequest request, HttpServletResponse response, SorgenteType s) throws Exception {
//	UtenteType dettaglio =  null;
//    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//
//
//	String url = null;
//	try {
//		
//			 
//			HttpSession session = request.getSession(false);
//			if (session == null) {
//				logger.warn("Sessione Scaduta");
//			} else {
//				dettaglio = (UtenteType)session.getAttribute("dettaglio");
//			}
//			
//			url = "modificaSorgente";
//			ModelAndView mav = new ModelAndView(url);
//			String form = request.getParameter("form");
//			logger.debug("Prelevo la sorgente dalla lista autisti");
//			 if (!Utils.isValid(form)) {
//					int idSorgente = Integer.parseInt(request.getParameter("id_sorg"));
//					for (SorgenteType sf : dettaglio.getListaSorgenti()) {
//						if (sf.getIdSorgente() == idSorgente) {
//							s = sf;
//							break;
//						}
//					} 
//			 } else if("1".equals(form)) {	 // DOPO IL SUBMIT 
//				if (!Utils.isValid(s.getNome())) {
//					errori.add(new LabelValueBean("Inserire il nome col quale vuoi identificare la sorgente", ""));
//				} else {
//						logger.debug("Procedo alla modifica della sorgente");
//						boolean check = areaDao.modificaSorgente(s);
//						
//						if (!check) {
//							errori.add(new LabelValueBean("Si sono verificati degli errori durante la modifica, perfavore contattare l'assistenza", ""));
//						} else {
//							ok.add(new LabelValueBean("La sorgente \""+s.getNome()+"\" e' stata modificato correttamente", ""));
//							dettaglio.setListaSorgenti(areaDao.listaSorgentiIdUser(dettaglio.getIdUser()));
//						}
//				}
//			}
//			
//	    	if (errori.size() > 0) {
//	    		request.setAttribute("listaErrori", errori);
//
//	    	}
//	    	
//	    	if (ok.size() > 0) {
//	    		request.setAttribute("listaOk", ok);
//	    	}
//			
//			logger.warn("Procedo al redirect "+url);
//			mav.addObject("command", s);
//			return mav.addObject("dettaglio", dettaglio);
//			
//	}catch (Exception e) {
//		logger.error("SI E' VERIFICATO UN ERRORE");
//		logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//		logger.error(e);
//		return new ModelAndView("gestioneErrore").addObject(e);
//	}
//}	
//	
	
	

//	public ModelAndView eliminaServizio(HttpServletRequest request, HttpServletResponse response, ServizioType s) throws Exception {
//		UtenteType dettaglio =  null;
//		String url = null;
//	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//		try {
//				HttpSession session = request.getSession(false);
//				if (session == null) {
//					logger.warn("Sessione Scaduta");
//				} else {
//					dettaglio = (UtenteType)session.getAttribute("dettaglio");
//				}
//				
//				url = "listaServiziPerArea";
//				ModelAndView mav = new ModelAndView(url);
//				
//				//Stringhe per il filtro data
//					String dataIniz = request.getParameter("dataIniz");
//					String dataFine = request.getParameter("dataFine");
//					
//					logger.debug("Controllo il tipo Accesso dell'utente ");
//					
//						logger.debug("L'utente e' abilitato, procedo alla cancellazione");
//					
//							try {
//								servizioDao.eliminaServizio(s);
//								ok.add(new LabelValueBean("Servizio del giorno "+s.getData()+" alle ore "+s.getOre()+":"+s.getMinuti()+" e' stato ELIMINATO correttamente, ", ""));
//								
//
//							} catch (Exception e) {
//								errori.add(new LabelValueBean("Si sono verificati degli errori durante l'inserimento, per favore contattare l'assistenza, ", ""));
//							}
//					
//				logger.warn("Ricarico la lista");
//				ArrayList<ServizioType> listaServizi =  servizioDao.listaServiziPerArea(dettaglio.getAppoIdArea(), dataIniz, dataFine);
//					
//				
//				
//		    	if (errori.size() > 0) {
//		    		request.setAttribute("listaErrori", errori);
//		    	}
//		    	
//		    	if (ok.size() > 0) {
//		    		request.setAttribute("listaOk", ok);
//		    	}
//				
//				
//		    	mav.addObject("back", request.getParameter("caller"));
//				mav.addObject("caller", "listaServiziAutista.html");
//				mav.addObject("command", s );
//				mav.addObject("listaServizi", listaServizi );
//				logger.warn("Procedo al redirect "+url);
//
//				return mav;
//				
//		}catch (Exception e) {
//			logger.error("SI E' VERIFICATO UN ERRORE");
//			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//			logger.error(e);
//			return new ModelAndView("gestioneErrore").addObject(e);
//		}
//	}		

//	public ModelAndView eliminaPart(HttpServletRequest request, HttpServletResponse response) throws Exception {
//		UtenteType dettaglio =  null;
//		String url = null;
//
//	    List<LabelValueBean> errori = new ArrayList<LabelValueBean>();
//	    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();
//		try {
//				HttpSession session = request.getSession(false);
//				if (session == null) {
//					logger.warn("Sessione Scaduta");
//				} else {
//					dettaglio = (UtenteType)session.getAttribute("dettaglio");
//				}
//				
//				url = "listaServiziPerArea";
//				ModelAndView mav = new ModelAndView(url);
//				
//				//Stringhe per il filtro data
//					String dataIniz = request.getParameter("dataIniz");
//					String dataFine = request.getParameter("dataFine");
//				//
//					int idUser = 0;
//					int idArea = 0;
//					if (Utils.isValid(request.getParameter("idUser"))) {
//						idUser = Integer.parseInt(request.getParameter("idUser"));
//						idArea = Integer.parseInt(request.getParameter("idArea"));
//					}
//					logger.debug("Controllo il tipo Accesso dell'utente ");
//					
//						logger.debug("L'utente e' abilitato, procedo alla cancellazione");
//							try {
//								areaDao.eliminaPart(idUser, idArea);
//								ok.add(new LabelValueBean("L'utente non puo' piu' accedere a quest'area, tutti i servizi precedentemente assegnatigli sono tornati liberi", ""));
//							} catch (Exception e) {
//								errori.add(new LabelValueBean("Si sono verificati degli errori durante l'inserimento, per favore contattare l'assistenza, ", ""));
//							}
//					
//				logger.warn("Ricarico la lista");
//				ArrayList<ServizioType> listaServizi =  servizioDao.listaServiziPerArea(dettaglio.getAppoIdArea(), dataIniz, dataFine);
//				dettaglio.setListaPartecipanti(areaDao.listaPartecipanti(idArea));
//				
//				
//		    	if (errori.size() > 0) {
//		    		request.setAttribute("listaErrori", errori);
//		    	}
//		    	
//		    	if (ok.size() > 0) {
//		    		request.setAttribute("listaOk", ok);
//		    	}
//				
//				
//		    	mav.addObject("back", request.getParameter("caller"));
//				mav.addObject("caller", "listaServizi.html");				// SE listaPart.size > 1 c'e' oltre a lui un altro utente
//				mav.addObject("showPartList", true); 
//				mav.addObject("listaServizi", listaServizi );
//				logger.warn("Procedo al redirect "+url);
//
//				return mav;
//				
//		}catch (Exception e) {
//			logger.error("SI E' VERIFICATO UN ERRORE");
//			logger.error("Utente: "+(Utils.isNull(dettaglio) ? dettaglio.getIdUser() : "N/A"));
//			logger.error(e);
//			return new ModelAndView("gestioneErrore").addObject(e);
//		}
//	}		


}

